package com.sky.mapper;

import com.github.pagehelper.Page;
import com.sky.annotation.AutoFill;
import com.sky.dto.DishPageQueryDTO;
import com.sky.entity.Dish;
import com.sky.enumeration.OperationType;
import com.sky.vo.DishVO;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

@Mapper
public interface DishMapper {

	/**
	 * 根据分类id查询菜品数量
	 *
	 * @param categoryId
	 * @return
	 */
	@Select("select count(id) from dish where category_id = #{categoryId}")
	Integer countByCategoryId(Long categoryId);

	/**
	 * 根据菜品名查询菜品
	 *
	 * @param name
	 * @return
	 */
	@Select("select * from dish where name = #{name}")
	Dish getByName(String name);

	/**
	 * 根据菜品id查询菜品
	 *
	 * @param id
	 * @return
	 */
	@Select("select * from dish where id = #{id}")
	Dish getById(Long id);

	/**
	 * 根据菜品id删除菜品
	 *
	 * @param id
	 */
	@Delete("delete from dish where id= #{id}")
	void deleteById(Long id);

	/**
	 * 插入菜品
	 *
	 * @param dish
	 */
	@AutoFill(OperationType.INSERT)
	void insert(Dish dish);

	/**
	 * 菜品分页查询
	 *
	 * @param dishPageQueryDTO
	 * @return
	 */
	Page<DishVO> pageQuery(DishPageQueryDTO dishPageQueryDTO);

	/**
	 * 根据id动态修改菜品信息
	 *
	 * @param dish
	 */
	@AutoFill(OperationType.UPDATE)
	void update(Dish dish);

	/**
	 * 条件查询菜品，可根据：名字模糊查询，起售停售状态，分类 条件查询
	 *
	 * @param dish
	 * @return
	 */
	List<Dish> list(Dish dish);

	/**
	 * 根据套餐id查询出哪些菜品被这个套餐包含
	 *
	 * @param setmealId
	 * @return
	 */
	@Select("select d.* from dish d left join setmeal_dish sd on d.id = sd.dish_id where sd.setmeal_id = #{setmealId}")
	List<Dish> getBySetmealId(Long setmealId);

	/**
	 * 根据条件统计菜品数量
	 * @param map
	 * @return
	 */
	Integer countByMap(Map map);

}
